package com.tksflysun.im.common.calendartrans;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 阳历年
 * 
 * @author 6tail
 *
 */
public class SolarYear {
    /** 年 */
    private int year;

    /**
     * 默认当年
     */
    public SolarYear() {
        this(new Date());
    }

    /**
     * 通过日期初始化
     */
    public SolarYear(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        year = c.get(Calendar.YEAR);
    }

    /**
     * 通过日历初始化
     */
    public SolarYear(Calendar calendar) {
        year = calendar.get(Calendar.YEAR);
    }

    /**
     * 通过年初始化
     * 
     * @param year
     *            年
     */
    public SolarYear(int year) {
        this.year = year;
    }

    /**
     * 通过指定日期获取阳历年
     *
     * @param date
     *            日期
     * @return 阳历年
     */
    public static SolarYear fromDate(Date date) {
        return new SolarYear(date);
    }

    /**
     * 通过指定日历获取阳历年
     *
     * @param calendar
     *            日历
     * @return 阳历年
     */
    public static SolarYear fromCalendar(Calendar calendar) {
        return new SolarYear(calendar);
    }

    /**
     * 通过指定年份获取阳历年
     *
     * @param year
     *            年
     * @return 阳历年
     */
    public static SolarYear fromYear(int year) {
        return new SolarYear(year);
    }

    /**
     * 获取年
     * 
     * @return 年
     */
    public int getYear() {
        return year;
    }

    /**
     * 获取本年的阳历月列表
     * 
     * @return 阳历月列表
     */
    public List<SolarMonth> getMonths() {
        List<SolarMonth> l = new ArrayList<SolarMonth>(12);
        SolarMonth m = new SolarMonth(year, 1);
        l.add(m);
        for (int i = 1; i < 12; i++) {
            l.add(m.next(i));
        }
        return l;
    }

    /**
     * 获取往后推几年的阳历年，如果要往前推，则年数用负数
     * 
     * @param years
     *            年数
     * @return 阳历年
     */
    public SolarYear next(int years) {
        Calendar c = Calendar.getInstance();
        c.set(year, 0, 1);
        c.add(Calendar.YEAR, years);
        return new SolarYear(c);
    }

    public String toString() {
        return year + "";
    }

    public String toFullString() {
        return year + "年";
    }
}